package network

import (
	"crypto/tls"
	"net/http"
)

type (
	// 可选参数配置函数
	Option func(*Options)

	// 参数配置结构
	Options struct {
		// 网络协议
		Network string

		// IP端口
		Address string

		// Websocket监听路径
		WSPath string

		// Websocket TLS配置
		WSTlsConfig *tls.Config

		// Websocket 建立连接的请求头
		WSRequestHeader http.Header
	}
)

// 配置生成
func LoadOptions(options ...Option) (opts *Options) {
	opts = new(Options)
	for _, option := range options {
		option(opts)
	}
	return
}

// 指定网络协议
func WithNetwork(str string) Option {
	return func(o *Options) {
		o.Network = str
	}
}

// 指定IP端口
func WithAddress(str string) Option {
	return func(o *Options) {
		o.Address = str
	}
}

// 指定Websocket请求路径
func WithWSPath(str string) Option {
	return func(o *Options) {
		o.WSPath = str
	}
}

// 指定Websocket TLS配置
func WithWSTlsConfig(cfg *tls.Config) Option {
	return func(o *Options) {
		o.WSTlsConfig = cfg
	}
}

// 指定建立Websocket连接的请求头
func WithWSRequestHeader(header http.Header) Option {
	return func(o *Options) {
		o.WSRequestHeader = header
	}
}
